home *** CD-ROM | disk | FTP | other *** search
/ Kit PC World De Ampliacion De Windows 95 / Kit PC World de ampliacion de Windows 95.iso / clarion / cw15 / examp15.z / HEXEDIT.APP (.txt) < prev    next >
Clarion Topspeed Data File  |  1995-10-05  |  27KB  |  932 lines

  1. CurrentTab
  2. CurrentTab:
  3. CurrentTab
  4. 6?CurrentTab:Prompt
  5. tCurrentTab:
  6. CurrentTab
  7. c@s80
  8. CurrentTab
  9. ForceRefresh
  10. @n-13
  11. ForceRefresh:
  12. ForceRefresh
  13. B?ForceRefresh:Prompt
  14. ompForceRefresh:
  15. iaForceRefresh
  16. wIn@n-13
  17. EForceRefresh
  18. ind@n-13
  19. @n-13
  20. WindowInitialized
  21. @n-13
  22. WindowInitialized:
  23. WindowInitialized
  24. N?WindowInitialized:Prompt
  25. ndWindowInitialized:
  26. pWindowInitialized
  27. @n-13
  28. 9WindowInitialized
  29. @n-13
  30. WindowOpened
  31. @n-13
  32. WindowOpened:
  33. WindowOpened
  34. B?WindowOpened:Prompt
  35. WindowOpened:
  36. :WindowOpened
  37. qu@n-13
  38. 0WindowOpened
  39. qu@n-13
  40. LocalResponse
  41. @n-13
  42. LocalResponse:
  43. LocalResponse
  44. B?LocalResponse:Prompt
  45. LocalResponse:
  46. :LocalResponse
  47. qu@n-13
  48. ELocalResponse
  49. qu@n-13
  50. OriginalRequest
  51. @n-13
  52. OriginalRequest:
  53. OriginalRequest
  54. F?OriginalRequest:Prompt
  55. OriginalRequest:
  56. ocaOriginalRequest
  57. @n-13
  58. 7OriginalRequest
  59. @n-13
  60. LocalRequest
  61. @n-13
  62. LocalRequest:
  63. LocalRequest
  64. B?LocalRequest:Prompt
  65. LocalRequest:
  66. LocalRequest
  67. @n-13
  68. @LocalRequest
  69. @n-13
  70. 2Clarion for Windows Hex Editor
  71. &File
  72. ?FileMenu
  73. Open...
  74. ?FileOpen
  75. >E&xit
  76. ?Exit
  77. Exit this application
  78. STD:Close
  79. &Edit
  80. ?EditMenu
  81. FCu&t
  82. Remove item to Windows Clipboard
  83. STD:Cut
  84. >&Copy
  85. ?Copy
  86. Copy item to Windows Clipboard
  87. STD:Copy
  88. H&Paste
  89. ?Paste
  90. Paste contents of Windows Clipboard
  91. STD:Paste
  92. >&Window
  93. Create and Arrange windows
  94. STD:WindowList
  95. JT&ile
  96. ?Tile
  97. Make all open windows visible
  98. STD:TileWindow
  99. F&Cascade
  100. ?Cascade
  101. Stack all open windows
  102. STD:CascadeWindow
  103. J&Arrange Icons
  104. ?Arrange
  105. Align all window icons
  106. STD:ArrangeIcons
  107. &&Help
  108. ?Help
  109. STD:Help
  110. V&Contents
  111. ?Helpindex
  112.  the contents of the help file
  113. HelpIndex
  114. V&Search for Help On...
  115. ?HelpSearch
  116. ch for help on a subject
  117. HelpSearch
  118. V&How to Use Help
  119. ?HelpOnHelp
  120. to use Windows Help
  121. HelpOnHelp
  122. AppFrame
  123. %AfterWindowOpening
  124. AppFrameRef &= AppFrame
  125. the corresponding character
  126.      1?EditASCII{PROP:SelEnd} = ?List{PROP:column} - 1 
  127. ! in the ENTRY control
  128. ELSE $)! but if the ?EditASCII is highlighted
  129. SELECT(?EditASCII) 
  130. ! select it for editing
  131. OF EVENT:Accepted 
  132. IF KEYCODE() = MouseLeft2 
  133. '!When user double-clicks on the list
  134. IF NOT FileRead 
  135. .!Check to see if the whole file is in the Q
  136. XMESSAGE('You can''t edit until the file read is complete','Wait a minute!',ICON:Hand)
  137. CYCLE 
  138. 2! and bail out if the file read is not finished
  139. GET(Q,CHOICE()) 
  140. )!Get the currently highlighted Q entry
  141.      3?EditHex{PROP:use} = Hex[?List{PROP:column} - 1]
  142.  06!Set ENTRY's USE attribute to highlighted Hex field
  143.      1?List{PROP:edit,?List{PROP:column}} = ?EditHex
  144. !Enable edit-in-place 
  145. SELECT(?EditHex) 
  146. !! and select the ENTRY control
  147. OF ?EditHex !%!For the HEX editing ENTRY control
  148. CASE EVENT()
  149. OF EVENT:Selected 
  150. !When selected for edit
  151. ?EditHex{PROP:Touched} = 1 
  152. )! force the EVENT:Accepted to generate
  153. "ChangeBuffer = CONTENTS(?EditHex) 
  154. "! and save the current contents
  155. OF EVENT:Accepted 
  156.  !When user leaves the control
  157. 4IF CLIP(ChangeBuffer) <> CLIP(CONTENTS(?EditHex))
  158. ! check for changes
  159. Q:Changed = 1 
  160.  ! flag the Q entry as changed
  161. ChangedQ = 1 
  162. ! and flag the Q as changed
  163. DO BuildStringDisplay 
  164. '! then format the ASCII text version
  165. DISPLAY 
  166. ! and display it
  167. PUT(Q)  %! then put the entry back in the Q
  168.      %IF ERRORCODE() THEN STOP(ERROR()).
  169. C?List{PROP:edit,?List{PROP:column}} = 0  !Turn off edit-in-place
  170. ?EditHex{PROP:Hide} = 1 
  171. ! hide the ENTRY control
  172. SELECT(?List) 
  173. ! and select the list
  174.   END
  175. BuildQue  ROUTINE 
  176. 9!This ROUTINE builds the display QUEUE
  177.   LOOP 128 TIMES  
  178. !Going to read 2K bytes
  179. NEXT(InFile)  
  180. ! 16 bytes at a time
  181. IF ERRORCODE() 
  182. !If end of file
  183. FileRead = 1 
  184. ! flag the file as read
  185. StatusText = 'All Bytes read 
  186. *'   ! setup the status bar text display
  187. BREAK %
  188. ! and break out of the loop
  189. Q:Buffer = InFile:Buffer 
  190. !Assign text to queue
  191. DO BuildHexDisplay 
  192. 0! and build the Hexadecimal values to display
  193. Q:RecPtr = POINTER(InFile) 
  194. -! get the current byte address in the file
  195. )StatusText = Q:RecPtr & ' ' & FileToEdit 
  196. &! setup the status bar text display
  197. ADD(Q) &
  198. ! and add the entry to the Q
  199. IF ERRORCODE() 
  200. "!Check for any unexpected error
  201. FileRead = 1 
  202. ! flag the file as read
  203. BREAK %
  204. ! and break out of the loop
  205.   END
  206.   IF FileRead THEN Win1{PROP:Timer} = 0. 
  207. Y!Turn off the timer when the file is read
  208.   AppFrameRef{PROP:StatusText,1} = StatusText 
  209. :!Display the status bar text 
  210. ProcedureReturn  ROUTINE 
  211. ;!This ROUTINE cleans up after the procedure
  212.   IF ChangedQ #+!Check for changes made to the Q entries
  213. xIF MESSAGE('Write changes to file?','Clarion Hex Editor',ICON:Question,BUTTON:Yes+BUTTON:No,BUTTON:No,1) = BUTTON:Yes
  214.  0'!Ask whether to save changes to file
  215. LOOP X# = 1 TO RECORDS(Q) 
  216. !Process all Q entries
  217. GET(Q,X#) 
  218. ! one at a time
  219. %IF ERRORCODE() THEN STOP(ERROR()).
  220. IF NOT Q:Changed THEN CYCLE. 
  221. 1!Get the next entry if this one hasn't changed
  222. GET(InFile,Q:RecPtr) 
  223.  !Get the record from the file
  224. %IF ERRORCODE() THEN STOP(ERROR()).
  225. InFile:Buffer = Q:Buffer 
  226. *!Assign changed data to the file buffer
  227. PUT(InFile) 
  228. "! and write the changes to disk
  229. %IF ERRORCODE() THEN STOP(ERROR()).
  230.   END
  231.   CLOSE(InFile) !<!Close the file
  232.   AppFrameRef{PROP:StatusText,2} = ' {80}' 
  233. U!Clean up the status bar text
  234.   AppFrameRef{PROP:StatusText,1} = ' {80}'
  235.   FREE(Q) ')!Free the memory used by the Q
  236.   RETURN (9! and return to the AppFrame
  237. BuildHexDisplay  ROUTINE 
  238. <!This ROUTINE transalates ASCII to HEX
  239.   LOOP Y# = 1 TO 16 
  240. !!Loop through ASCII characters
  241. $Hex[Y#] = StringToHex(Q:Buffer[Y#])     n! Pass ASCII to function and get back HEX
  242.   END
  243.   DO BuildASCIIStringDisplay
  244. BuildStringDisplay  ROUTINE 
  245. <!This ROUTINE transalates HEX to ASCII
  246.   LOOP Y# = 1 TO 16 
  247. !Loop through HEX values
  248. $Q:Buffer[Y#] = HexToString(Hex[Y#])     s! Pass HEX to function and get back ASCII
  249.   END
  250.   DO BuildASCIIStringDisplay
  251. BuildASCIIStringDisplay  ROUTINE 
  252. 3!This ROUTINE traps 00 HEX to
  253.   LOOP Y# = 1 TO 16 
  254. '! format the ASCII display correctly
  255. IF Q:Buffer[Y#] <> '<0>' 
  256. !If the character is not 00h
  257. #Q:BufferDisplay[Y#] = Q:Buffer[Y#] 
  258. ! just put it in the display
  259. ELSE (
  260. ! but if it is 00h
  261. Q:BufferDisplay[Y#] = '<20h>' 
  262. ! display a blank
  263.   END
  264. C:\CW15\BIN\CW15EXAM.HLP
  265. Clarion
  266. -- Generator
  267. #noedit
  268. #system win
  269. #model clarion dll
  270. #pragma debug(vid=>full)
  271. #compile HEXED_RD.CLW-- GENERATED
  272. #compile HEXED_RU.CLW-- GENERATED
  273. #compile HEXED_SF.CLW-- GENERATED
  274. #compile HEXEDIT.clw /define(GENERATED=>on)-- GENERATED
  275. #compile HEXED001.clw /define(GENERATED=>on)-- GENERATED
  276. #compile HEXED002.clw /define(GENERATED=>on)-- GENERATED
  277. #compile HEXED003.clw /define(GENERATED=>on)-- GENERATED
  278. #compile HEXED004.clw /define(GENERATED=>on)-- GENERATED
  279. #pragma link(C%L%DOS%S%.LIB)
  280. #link HEXEDIT.EXE
  281. %GenerationCompleted
  282. %Module
  283. HEXEDIT.clw
  284. HEXED001.clw
  285. HEXED002.clw
  286. HEXED003.clw
  287. HEXED004.clw
  288. %LastTarget32
  289. %LastProgramExtension
  290. %LastApplicationDebug
  291. %LastApplicationLocalLibrary
  292. L %ProgramAuthor
  293. %MessageDescription
  294. %GlobalExternal
  295. %GenerateEmbedComments
  296. %INIActive
  297. H%INIFile
  298. Program Name.INI
  299. %ININame
  300. %DefaultGenerate
  301. %DefaultCloseFile
  302. Close the File
  303. %DefaultRILogout
  304. %WarnOnLogoutError
  305. %DefaultThreaded
  306. Use File Setting
  307. %DefaultCreate
  308. Use File Setting
  309. %DefaultExternal
  310. None External
  311. %DefaultExternalSource
  312. %DefaultExternalAPP
  313. %DefaultExport
  314. %DefaultOpenMode
  315. Share
  316. %DefaultUserAccess
  317. Read/Write
  318. %DefaultOtherAccess
  319. Deny None
  320. %OverrideGenerate
  321. %File
  322. %OverrideCloseFile
  323. %File
  324. Use Default
  325. %OverrideRILogout
  326. %File
  327. Use Default
  328. %OverrideThreaded
  329. %File
  330. Use Default
  331. %OverrideCreate
  332. %File
  333. Use Default
  334. %OverrideExternal
  335. %File
  336. Use Default
  337. %OverrideExternalSource
  338. %File
  339. %OverrideExternalAPP
  340. %File
  341. "%OverrideExport
  342. %File
  343. %OverrideOpenMode
  344. %File
  345. Use Default
  346. %OverrideUserAccess
  347. %File
  348. Use Default
  349. %OverrideOtherAccess
  350. %File
  351. Use Default
  352.  %INISaveWindow
  353. %ButtonAction
  354. %Control
  355. ?Exit
  356. No Special Action
  357. ?FileOpen
  358. Call a Procedure
  359. No Special Action
  360. ?Copy
  361. No Special Action
  362. ?Paste
  363. No Special Action
  364. ?Tile
  365. No Special Action
  366. ?Cascade
  367. No Special Action
  368. ?Arrange
  369. No Special Action
  370. ?FileMenu
  371. No Special Action
  372. ?Help
  373. No Special Action
  374. No Special Action
  375. %MenuAction
  376. %Control
  377. ?Exit
  378. No Special Action
  379. %Parameters
  380. %ReturnValue
  381. %ButtonRunName
  382. %Control
  383. ?FileOpen
  384. ?Exit
  385. ?Copy
  386. ?Paste
  387. ?Tile
  388. ?Cascade
  389. ?Arrange
  390. ?FileMenu
  391. ?Help
  392. %ButtonRunParameters
  393. %Control
  394. ?FileOpen
  395. ?Exit
  396. ?Copy
  397. ?Paste
  398. ?Tile
  399. ?Cascade
  400. ?Arrange
  401. ?FileMenu
  402. ?Help
  403. %ButtonProcedure
  404. %Control
  405. ?FileOpen
  406. ?Exit
  407. ?Copy
  408. ?Paste
  409. ?Tile
  410. ?Cascade
  411. ?Arrange
  412. ?FileMenu
  413. ?Help
  414. :%ButtonThread
  415. %Control
  416. ?FileOpen
  417. ?Exit
  418. ?Copy
  419. ?Paste
  420. ?Tile
  421. ?Cascade
  422. ?Arrange
  423. ?FileMenu
  424. ?Help
  425. %ButtonThreadStack
  426. %Control
  427. ?FileOpen
  428. 25000
  429. ?Exit
  430. 25000
  431. 25000
  432. ?Copy
  433. 25000
  434. ?Paste
  435. 25000
  436. ?Tile
  437. 25000
  438. ?Cascade
  439. 25000
  440. ?Arrange
  441. 25000
  442. ?FileMenu
  443. 25000
  444. ?Help
  445. 25000
  446. 25000
  447. %ButtonParameters
  448. %Control
  449. ?FileOpen
  450. ?Exit
  451. ?Copy
  452. ?Paste
  453. ?Tile
  454. ?Cascade
  455. ?Arrange
  456. ?FileMenu
  457. ?Help
  458. %ButtonRequest
  459. %Control
  460. ?FileOpen
  461. ?Exit
  462. ?Copy
  463. ?Paste
  464. ?Tile
  465. ?Cascade
  466. ?Arrange
  467. ?FileMenu
  468. ?Help
  469. %PreLookupKey
  470. %Control
  471. ?FileOpen
  472. ?FileMenu
  473. ?Help
  474. %PreLookupField
  475. %Control
  476. ?FileOpen
  477. ?FileMenu
  478. ?Help
  479. %PreLookupProcedure
  480. %Control
  481. ?FileOpen
  482. ?FileMenu
  483. ?Help
  484. %PostLookupKey
  485. %Control
  486. ?FileOpen
  487. ?FileMenu
  488. ?Help
  489. %PostLookupField
  490. %Control
  491. ?FileOpen
  492. ?FileMenu
  493. ?Help
  494. %PostLookupProcedure
  495. %Control
  496. ?FileOpen
  497. ?FileMenu
  498. ?Help
  499. %PostLookupDuringValidate
  500. %Control
  501. ?FileOpen
  502. ?FileMenu
  503. ?Help
  504. %ForceWindowRefresh
  505. %Control
  506. ?FileOpen
  507. ?FileMenu
  508. ?Help
  509. %CheckedAssigns
  510. %Control
  511. %CheckedAssignVariable
  512. %CheckedAssigns
  513. ?FileOpen
  514. ?FileMenu
  515. ?Help
  516. %CheckedAssignValue
  517. %CheckedAssigns
  518. ?FileOpen
  519. ?FileMenu
  520. ?Help
  521. %CheckedHides
  522. %Control
  523. %CheckedControl
  524. %CheckedHides
  525. ?FileOpen
  526. ?FileMenu
  527. ?Help
  528. %CheckedControlAction
  529. %CheckedHides
  530. ?FileOpen
  531. ?FileMenu
  532. ?Help
  533. %UncheckedAssigns
  534. %Control
  535. %UncheckedAssignVariable
  536. %UncheckedAssigns
  537. ?FileOpen
  538. ?FileMenu
  539. ?Help
  540. %UncheckedAssignValue
  541. %UncheckedAssigns
  542. ?FileOpen
  543. ?FileMenu
  544. ?Help
  545. %UnCheckedHides
  546. %Control
  547. %UnCheckedControl
  548. %UnCheckedHides
  549. ?FileOpen
  550. ?FileMenu
  551. ?Help
  552. %UnCheckedControlAction
  553. %UnCheckedHides
  554. ?FileOpen
  555. ?FileMenu
  556. ?Help
  557. %Parameters
  558. %Parameters
  559. (StringToConvert)
  560. %Parameters
  561. (StringToConvert)
  562. Clarion$Clarion
  563. Clarion$GENERATED
  564. Clarion$GENERATED
  565. Clarion$GENERATED
  566. Clarion$GENERATED
  567. Clarion$Frame
  568. Clarion$DateTimeDisplay
  569. %DisplayDate
  570. %DatePicture
  571. October 31, 1959
  572. %OtherDatePicture
  573. %ShowDayOfWeek
  574. %DateDisplayLocation
  575. Status Bar
  576. %DateStatusSection
  577. %DateControl
  578. %DisplayTime
  579. %TimePicture
  580. 5:30PM
  581. %OtherTimePicture
  582. %TimeDisplayLocation
  583. Status Bar
  584. %TimeStatusSection
  585. %TimeControl
  586. >EditFile
  587. Clarion$Source
  588.  StringToHex
  589. (STRING),STRING
  590. Clarion$Source
  591.  HexToString
  592. (STRING),STRING
  593. Clarion$Source
  594. AppFrameRef
  595. App Frame Ref:
  596. App Frame Ref
  597. L@s20
  598. ?AppFrameRef:Prompt
  599. App Frame Ref:
  600. AppFrameRef
  601. AppFrameRef
  602. M&42B2
  603. %DataSection
  604. FileToEdit 
  605. STRING(80),STATIC,THREAD 
  606. *!File's NAME attribute variable
  607. FileSize 
  608. LONG 
  609. #!File size save variable
  610. FileRead 
  611. BYTE(0) 
  612. !File all read flag
  613. ChangedQ 
  614. BYTE(0) 
  615. .!QUEUE changed flag
  616. ChangeBuffer  STRING(16) 
  617. +!Q entry editing save variable
  618. StatusText 
  619. STRING(80) 
  620. d!Status bar tex formatting
  621. InFile  FILE,DRIVER('DOS','/FILEBUFFERS=4'),NAME(FileToEdit),THREAD
  622. RECORD  
  623. !Input file
  624. Buffer 
  625. STRING(16)
  626. QUEUE,PRE(Q) 
  627.  !List box display QUEUE
  628. RecPtr 
  629. HexGroup  GROUP !
  630. !HEX display fields
  631. STRING(2)
  632. STRING(2)
  633. STRING(2)
  634. STRING(2)
  635. STRING(2)
  636. STRING(2)
  637. STRING(2)
  638. STRING(2)
  639. STRING(2)
  640. STRING(2)
  641. STRING(2)
  642. STRING(2)
  643. STRING(2)
  644. STRING(2)
  645. STRING(2)
  646. STRING(2)
  647. BufferDisplay 
  648. STRING(16) 
  649. !ASCII display field
  650. Buffer 
  651. STRING(16) 
  652. &!ASCII display column
  653. Changed   BYTE "
  654. !QUEUE entry changed flag
  655. #STRING(2),DIM(16),OVER(Q:HexGroup) 
  656. !HEX editing array, OVER the display fields
  657. Win1 WINDOW('List Edit In Place'),AT(,,300,169),FONT('Courier New',10,,FONT:regular),ALRT(MouseRight), |
  658. 'TIMER(1),SYSTEM,GRAY,DOUBLE,MDI,MASK
  659. MENUBAR
  660. MENU('&File'),USE(?File)
  661. &ITEM('Close'),USE(?FileClose),FIRST
  662. MENU('&Edit'),USE(?Edit)
  663. 'ITEM('&Hex'),USE(?EditHexMenu),FIRST
  664. LIST,AT(0,0,300,169),USE(?List),IMM,VSCROLL,COLUMN,FORMAT('28L|~Offset~@n06@[14L(2)@s2@12L@s2@12L@s2@12L@s2@12L@s2@12L@s2@12L@s2@12L@s2@12L' &|
  665. X'@s2@12L@s2@12L@s2@12L@s2@12L@s2@12L@s2@12L@s2@12L@s2@]|~Hexadecimal~60L(2)~ASCII' &|
  666. ' Text~@s16@'),FROM(Q)
  667. 2ENTRY(@S2),AT(60,61),USE(?EditHex),OVR,UPR,HIDE
  668. 0ENTRY(@S2),AT(60,61),USE(?EditASCII),OVR,HIDE
  669. %ProcessedCode
  670. 6  IF NOT FILEDIALOG('Choose File to Edit',FileToEdit,'All Files|*.*',0)
  671. RETURN &1!Return if no file chosen
  672.   END
  673.   OPEN(InFile) "!!Open the file
  674.   IF ERRORCODE()  
  675. ! aborting on any error
  676. RMESSAGE('Error ' & ERRORCODE() & ' opening file: ' & ERROR(),'ERROR',ICON:Hand)
  677. RETURN #
  678.   END
  679.   OPEN(Win1) $-!Open the window
  680.   FileSize = BYTES(InFile) 
  681. 5!Get the file size
  682.   Win1{PROP:Text} = NAME(InFile) 
  683. n!Display filename in the title bar
  684.   AppFrameRef{PROP:StatusText,2} = 'File Size - ' & FileSize & ' Bytes'
  685.  00!Display file size in status bar
  686.   SET(InFile) #%!Start at top of file
  687.   DO BuildQue #1!Get the first 2K of the file
  688.   SELECT(?List,1) 
  689. D!Put the highlight bar on the first entry
  690.   ?List{PROP:Column} = 2 
  691. .! but put it in the second column
  692.   GET(Q,1) &S!Synchronize the Q buffer with the first entry
  693.   ?List{PROP:edit,18} = ?EditASCII 
  694. S!Put ?EditASCII ENTRY control on col 18 
  695.   ?EditASCII{PROP:use} = Q:BufferDisplay 
  696. J! to display the data's ASCII text version
  697.   ?EditASCII{PROP:text} = '@K?
  698. _K'  ! then make sure all 16 characters display (no clipping)
  699.   ?EditASCII{PROP:SelStart} =  1 
  700. O!Highlight the first character in the ENTRY box
  701.   ?EditASCII{PROP:SelEnd} = 1 
  702. M! to correspond to the highlighted HEX value
  703.   ?EditASCII{PROP:Disable} = 1 
  704. 4!Disable the field so it's display-only
  705.   ACCEPT
  706. CASE EVENT()  .!Field-independent event handling structure
  707. OF EVENT:GainFocus 
  708. !When the window gains focus
  709. HAppFrameRef{PROP:StatusText,2} = 'File Size - ' & FileSize & ' Bytes'
  710.  0#!Display file size in status bar
  711. VAppFrameRef{PROP:StatusText,1} = StatusText  ! and display current file read status
  712. OF EVENT:AlertKey 
  713. !When the user
  714. IF KEYCODE() = MouseRight 
  715. ! presses right-click
  716. EXECUTE POPUP('Edit|Close') 
  717. ! display a popup menu
  718. BEGIN !
  719. ! for HEX mode editing
  720. SETKEYCODE(MouseLeft2) 
  721. 4! set the KEYCODE function to return double-click
  722. POST(EVENT:Accepted,?List) 
  723. 9! and execute the EVENT:Accepted code for the list box
  724.       POST(EVENT:Accepted,?FileClose) 
  725. <!For the Close selection, choose the File>Close menu item
  726. CYCLE #
  727. !Go back to ACCEPT
  728. OF EVENT:Timer 
  729. !When the timer goes off
  730. DO BuildQue 
  731.  ! read another 2K of the file
  732. CASE FIELD()  +!Field-specific event handling structure
  733. OF ?EditHexMenu 
  734. !For the Hex Edit menu item
  735. SETKEYCODE(MouseLeft2) 
  736. 4! set the KEYCODE function to return double-click
  737. POST(EVENT:Accepted,?List) 
  738. 9! and execute the EVENT:Accepted code for the list box
  739. OF ?FileClose 
  740. !For the Close menu item
  741. IF EVENT() = EVENT:Accepted 
  742. ! check for EVENT:Accepted
  743. DO ProcedureReturn 
  744. +! and DO the procedure "cleanup" ROUTINE
  745.     OF ?List $
  746. !For the List box
  747. CASE EVENT() 
  748. !Check the event
  749. OF EVENT:ScrollUp 
  750.  !When scrolling up one record
  751. IF CHOICE() = 1 
  752. ! see if on first entry
  753. SELECT(?List,1) 
  754. ! and stay on it
  755. ELSE $
  756. ! otherwise
  757. SELECT(?List,CHOICE()-1) 
  758. ! go to the previous entry
  759. POST(EVENT:NewSelection,?List) 
  760. /!Force synchronization between HEX and ASCII
  761. OF EVENT:ScrollDown 
  762. "!When scrolling down one record
  763. IF CHOICE() = RECORDS(Q) 
  764. ! see if on last entry
  765. SELECT(?List,RECORDS(Q)) 
  766. ! and stay on it
  767. ELSE $
  768. ! otherwise
  769. SELECT(?List,CHOICE()+1) 
  770. ! go to the next entry
  771. POST(EVENT:NewSelection,?List) 
  772. /!Force synchronization between HEX and ASCII
  773. OF EVENT:PageUp 
  774. !When scrolling up one page
  775.  IF CHOICE() < ?LIST{PROP:Items}     
  776. ! see if on first page
  777. SELECT(?List,1) 
  778. ! and go to first entry
  779. ELSE $
  780. ! otherwise
  781.      FSELECT(?List,CHOICE()-?LIST{PROP:Items})  ! go to the previous page
  782. POST(EVENT:NewSelection,?List) 
  783. /!Force synchronization between HEX and ASCII
  784. OF EVENT:PageDown 
  785.  !When scrolling down one page
  786. DIF CHOICE() > RECORDS(Q)-?LIST{PROP:Items}  ! see if on last page
  787. SELECT(?List,RECORDS(Q)) 
  788. ! and go to last entry
  789. ELSE $
  790. ! otherwise
  791.      BSELECT(?List,CHOICE()+?LIST{PROP:Items})  ! go to the next page
  792. POST(EVENT:NewSelection,?List) 
  793. /!Force synchronization between HEX and ASCII
  794. OF EVENT:ScrollTop 
  795. !When scrolling to the top
  796. SELECT(?List,1) 
  797. ! go to first entry
  798. POST(EVENT:NewSelection,?List) 
  799. /!Force synchronization between HEX and ASCII
  800. OF EVENT:ScrollBottom 
  801.  !When scrolling to the bottom
  802. SELECT(?List,RECORDS(Q)) 
  803. ! go to last entry
  804. POST(EVENT:NewSelection,?List) 
  805. /!Force synchronization between HEX and ASCII
  806. OF EVENT:ScrollDrag 
  807. (!When user moves the scroll bar thumb
  808. IF ?List{PROP:VScrollPos} 
  809. ! if it's not at the top
  810.      LSELECT(?List,?List{PROP:VScrollPos})   ! go to the thumb position's entry
  811. ELSE $
  812. ! otherwise
  813. SELECT(?List,1) 
  814. ! go to first entry
  815. POST(EVENT:NewSelection,?List) 
  816. /!Force synchronization between HEX and ASCII
  817. OF EVENT:NewSelection 
  818. &!When the user moves to a new entry
  819. GET(Q,CHOICE()) 
  820. 3! get it so ?EditASCII displays the correct data
  821. IF ?List{PROP:column} = 1 
  822. 2!Check for an attempt to edit the offset column
  823. ?List{PROP:column} = 2 
  824. ! and don't allow it
  825. ELSIF ?List{PROP:column} = 18 
  826. 1!Check for an attempt to edit the ASCII column
  827. ?List{PROP:column} = 17 
  828. ! and don't allow it
  829. DO BuildASCIIStringDisplay 
  830. <!Build display string for the ASCII display ENTRY control
  831. DISPLAY(?EditASCII) 
  832. ! then display it
  833. IF ?List{PROP:column} <> 18 
  834. %!See if a HEX value is highlighted
  835.      T?EditASCII{PROP:SelStart} = ?List{PROP:column} - 1  ! and highlight 
  836. %DataSection
  837. ByteToConvert  BYTE,OVER(StringToConvert) 
  838. @!BYTE re-declaration of passed STRING
  839. ReturnString   STRING(2) 
  840. :!Return data
  841. %ProcessedCode
  842.   ReturnString = '00' 
  843. 8!Initialize return variable
  844.   EXECUTE ByteToConvert/16 
  845. !!Format high-order nibble from
  846. ReturnString[1] = '1' 
  847. ! result of division by 16
  848. ReturnString[1] = '2'
  849. ReturnString[1] = '3'
  850. ReturnString[1] = '4'
  851. ReturnString[1] = '5'
  852. ReturnString[1] = '6'
  853. ReturnString[1] = '7'
  854. ReturnString[1] = '8'
  855. ReturnString[1] = '9'
  856. ReturnString[1] = 'A'
  857. ReturnString[1] = 'B'
  858. ReturnString[1] = 'C'
  859. ReturnString[1] = 'D'
  860. ReturnString[1] = 'E'
  861. ;ReturnString[1] = 'F'
  862.   END
  863.   EXECUTE ByteToConvert % 16 
  864.  !Format low-order nibble from
  865. ReturnString[2] = '1' 
  866. $! the remainder of division by 16
  867. ReturnString[2] = '2'
  868. ReturnString[2] = '3'
  869. ReturnString[2] = '4'
  870. ReturnString[2] = '5'
  871. ReturnString[2] = '6'
  872. ReturnString[2] = '7'
  873. ReturnString[2] = '8'
  874. ReturnString[2] = '9'
  875. ReturnString[2] = 'A'
  876. ReturnString[2] = 'B'
  877. ReturnString[2] = 'C'
  878. ReturnString[2] = 'D'
  879. ReturnString[2] = 'E'
  880. BReturnString[2] = 'F'
  881.   END
  882.   RETURN(ReturnString)
  883. %DataSection
  884. ReturnString   STRING(1) 
  885. !Return variable
  886. ByteString 
  887. BYTE,OVER(ReturnString) 
  888. X!BYTE re-declaration of the return variable
  889. %ProcessedCode
  890.   ByteString = 0  B!Initialize the return variable
  891.   IF NUMERIC(StringToConvert[1]) 
  892. 1!Check for decimal number in high-order nibble
  893. %ByteString = StringToConvert[1] * 16 
  894. "! and multiply it by 16
  895.   ELSE
  896. CASE StringToConvert[1] 
  897. !Convert alpha HEX numbers
  898.     OF 'A'
  899. ByteString = 10 * 16
  900.     OF 'B'
  901. ByteString = 11 * 16
  902.     OF 'C'
  903. ByteString = 12 * 16
  904.     OF 'D'
  905. ByteString = 13 * 16
  906.     OF 'E'
  907. ByteString = 14 * 16
  908.     OF 'F'
  909. ByteString = 15 * 16
  910.   END
  911.   IF NUMERIC(StringToConvert[2]) 
  912. 0!Check for decimal number in low-order nibble
  913. !ByteString += StringToConvert[2] 
  914. +! and add it to high-order value
  915.   ELSE
  916. CASE StringToConvert[2] 
  917. !Convert alpha HEX numbers
  918.     OF 'A'
  919. ByteString += 10
  920.     OF 'B'
  921. ByteString += 11
  922.     OF 'C'
  923. ByteString += 12
  924.     OF 'D'
  925. ByteString += 13
  926.     OF 'E'
  927. ByteString += 14
  928.     OF 'F'
  929. ByteString += 15
  930.   END
  931.   RETURN(ReturnString)
  932.